package com.aspose.cells;

import java.util.ArrayList;

class zaas {
   private WorksheetCollection a;
   private static String b = "Invalid formula:";

   zaas(WorksheetCollection var1) {
      this.a = var1;
   }

   zabd a(String var1, int var2) {
      zabf var3 = new zabf();
      char[] var4 = var1.toCharArray();
      boolean var5 = false;

      StringBuilder var6;
      for(var6 = new StringBuilder(); var2 < var4.length; ++var2) {
         zabd var7;
         switch(var4[var2]) {
         case '\n':
         case '\r':
            break;
         case ' ':
            int var9;
            for(var9 = var2 + 1; var9 < var4.length && var4[var9] == ' '; ++var9) {
               ;
            }

            boolean var10 = var2 == 0;
            if (!var10) {
               switch(var4[var2 - 1]) {
               case '\n':
               case '\r':
               case ' ':
               case '%':
               case '&':
               case '(':
               case ')':
               case '*':
               case '+':
               case ',':
               case '-':
               case '/':
               case ':':
               case '<':
               case '=':
               case '>':
               case '^':
                  var10 = true;
               }
            }

            if (!var10) {
               var10 = var9 == var4.length;
            }

            if (!var10) {
               switch(var4[var9]) {
               case ' ':
               case '%':
               case '&':
               case '(':
               case ')':
               case '*':
               case '+':
               case ',':
               case '-':
               case '/':
               case ':':
               case '<':
               case '=':
               case '>':
               case '^':
                  var10 = true;
               case '!':
               case '"':
               case '#':
               case '$':
               case '\'':
               case '.':
               case '0':
               case '1':
               case '2':
               case '3':
               case '4':
               case '5':
               case '6':
               case '7':
               case '8':
               case '9':
               case ';':
               case '?':
               case '@':
               case 'A':
               case 'B':
               case 'C':
               case 'D':
               case 'E':
               case 'F':
               case 'G':
               case 'H':
               case 'I':
               case 'J':
               case 'K':
               case 'L':
               case 'M':
               case 'N':
               case 'O':
               case 'P':
               case 'Q':
               case 'R':
               case 'S':
               case 'T':
               case 'U':
               case 'V':
               case 'W':
               case 'X':
               case 'Y':
               case 'Z':
               case '[':
               case '\\':
               case ']':
               }
            }

            if (!var10) {
               var3.a(var6, " ", 15, (byte[])null);
            }

            var2 = var9 - 1;
            break;
         case '"':
            var2 = this.b(var4, var6, var2);
            break;
         case '#':
            if (var6.length() == 0) {
               var2 = this.c(var6, var4, var2);
            } else {
               var6.append(var4[var2]);
            }
            break;
         case '%':
            if (!var3.a(var6)) {
               throw new CellsException(5, b);
            }
            break;
         case '&':
            var3.a(var6, "&", 2, zasg.k);
            break;
         case '\'':
            var2 = this.a(var4, var6, var2);
            break;
         case '(':
            var7 = new zabd();
            var2 = this.a(var7, var6, var4, var2);
            var3.a(var7);
            break;
         case '*':
            var3.a(var6, "*", 4, zasg.h);
            break;
         case '+':
            if (!a(var6, var4, var2)) {
               var3.a(var6, "+", true);
            }
            break;
         case ',':
            var3.a(var6, ",", 9, (byte[])null);
            break;
         case '-':
            if (a(var6, var4, var2)) {
               var6.append(var4[var2]);
            } else {
               var3.a(var6, "-", false);
            }
            break;
         case '/':
            var3.a(var6, "/", 4, zasg.i);
            break;
         case ':':
            if (var6.length() != 0 && !this.a(var4, var2, var6)) {
               var6.append(var4[var2]);
               break;
            }

            var3.a(var6, ":", 17, (byte[])null);
            break;
         case '<':
            if (var2 + 1 != var4.length) {
               switch(var4[var2 + 1]) {
               case '=':
                  var3.a(var6, "<=", 1, zasg.m);
                  ++var2;
                  break;
               case '>':
                  var3.a(var6, "<>", 1, zasg.q);
                  ++var2;
                  break;
               default:
                  var3.a(var6, "<", 1, zasg.l);
               }
            }
            break;
         case '=':
            var3.a(var6, "=", 1, zasg.n);
            break;
         case '>':
            if (var2 + 1 != var4.length && var4[var2 + 1] == '=') {
               var3.a(var6, ">=", 1, zasg.o);
               ++var2;
               break;
            }

            var3.a(var6, ">", 1, zasg.p);
            break;
         case '[':
            var2 = this.b(var6, var4, var2);
            break;
         case '^':
            var3.a(var6, "^", 5, zasg.j);
            break;
         case '{':
            if (var6.length() != 0) {
               throw new CellsException(5, b);
            }

            var7 = new zabd();
            var2 = this.a(var7, var4, var2);
            var3.a(var7);
            break;
         default:
            var6.append(var4[var2]);
         }
      }

      if (var6.length() != 0) {
         var3.b(var6);
      }

      switch(var3.getCount()) {
      case 0:
         return null;
      case 1:
         return var3.a(0);
      default:
         zabd[] var11 = new zabd[var3.getCount()];

         for(int var8 = 0; var8 < var11.length; ++var8) {
            var11[var8] = var3.a(var8);
         }

         return this.a(var11, 0, var11.length - 1, 1);
      }
   }

   private static boolean a(StringBuilder var0, char[] var1, int var2) {
      if (var2 + 1 < var1.length && Character.isDigit(var1[var2 + 1])) {
         int var3 = var0.length();
         if (var3 > 2 && (var0.charAt(var3 - 1) == 'E' || var0.charAt(var3 - 1) == 'e')) {
            int var4 = var3 - 2;

            while(var4 >= 0) {
               switch(var0.charAt(var4)) {
               case '+':
               case ',':
               case '-':
               case '.':
               case '0':
               case '1':
               case '2':
               case '3':
               case '4':
               case '5':
               case '6':
               case '7':
               case '8':
               case '9':
                  --var4;
                  break;
               case '/':
               default:
                  return false;
               }
            }

            return true;
         }
      }

      return false;
   }

   private int b(StringBuilder var1, char[] var2, int var3) {
      int var4 = 1;
      var1.append(var2[var3]);
      ++var3;

      for(; var3 < var2.length; ++var3) {
         switch(var2[var3]) {
         case '\'':
            if (var3 + 1 < var2.length && var2[var3 + 1] == '#') {
               var1.append(var2[var3]);
               ++var3;
               var1.append(var2[var3]);
               break;
            }

            var3 = this.a(var2, var1, var3);
            break;
         case '[':
            var1.append(var2[var3]);
            ++var4;
            break;
         case ']':
            var1.append(var2[var3]);
            --var4;
            if (var4 == 0) {
               return var3;
            }
            break;
         default:
            var1.append(var2[var3]);
         }
      }

      return var3;
   }

   private int c(StringBuilder var1, char[] var2, int var3) {
      switch(var2[var3 + 1]) {
      case 'D':
         if (var2[var3 + 2] == 'I' && var2[var3 + 3] == 'V' && var2[var3 + 4] == '/' && var2[var3 + 5] == '0' && var2[var3 + 6] == '!') {
            var1.append("#DIV/0!");
            var3 += 6;
            return var3;
         }
         break;
      case 'N':
         switch(var2[var3 + 2]) {
         case '/':
            if (var2[var3 + 3] == 'A') {
               var1.append("#N/A");
               var3 += 3;
               return var3;
            }

            throw new CellsException(5, b);
         case 'A':
            if (var2[var3 + 3] == 'M' && var2[var3 + 4] == 'E' && var2[var3 + 5] == '?') {
               var1.append("#NAME?");
               var3 += 5;
               return var3;
            }

            throw new CellsException(5, b);
         case 'U':
            if (var2[var3 + 3] == 'L' && var2[var3 + 4] == 'L' && var2[var3 + 5] == '!') {
               var1.append("#NULL!");
               var3 += 5;
               return var3;
            }

            if (var2[var3 + 3] == 'M' && var2[var3 + 4] == '!') {
               var1.append("#NUM!");
               var3 += 4;
               return var3;
            }

            throw new CellsException(5, b);
         default:
            throw new CellsException(5, b);
         }
      case 'R':
         if (var2[var3 + 2] == 'E' && var2[var3 + 3] == 'F' && var2[var3 + 4] == '!') {
            var1.append("#REF!");
            var3 += 4;
            return var3;
         }
         break;
      case 'V':
         if (var2[var3 + 2] == 'A' && var2[var3 + 3] == 'L' && var2[var3 + 4] == 'U' && var2[var3 + 5] == 'E' && var2[var3 + 6] == '!') {
            var1.append("#VALUE!");
            var3 += 6;
            return var3;
         }
      }

      throw new CellsException(5, b);
   }

   private int a(zabd var1, char[] var2, int var3) {
      ArrayList var4 = new ArrayList();
      var3 = this.a(var4, var2, var3);
      int var5 = -1;

      for(int var6 = 0; var6 < var4.size(); ++var6) {
         ArrayList var7 = (ArrayList)var4.get(var6);
         if (var5 == -1) {
            var5 = var7.size();
         } else if (var7.size() != var5) {
            throw new CellsException(5, "Invalid formula");
         }
      }

      var1.a("{}");
      var1.a(0);
      zabd[][] var12 = new zabd[var4.size()][];

      for(int var13 = 0; var13 < var12.length; ++var13) {
         ArrayList var8 = (ArrayList)var4.get(var13);
         var12[var13] = new zabd[var8.size()];

         for(int var9 = 0; var9 < var8.size(); ++var9) {
            String var10 = (String)var8.get(var9);
            zabd var11 = new zabd();
            var11.b(var1);
            var11.a(var10);
            var11.a(1);
            var12[var13][var9] = var11;
         }
      }

      var1.a(var12);
      return var3;
   }

   private int a(ArrayList var1, char[] var2, int var3) {
      ArrayList var4 = new ArrayList();
      com.aspose.cells.b.a.a.ze.a(var1, (Object)var4);
      StringBuilder var5 = new StringBuilder();
      ++var3;

      for(; var3 < var2.length; ++var3) {
         switch(var2[var3]) {
         case '\n':
         case '\r':
            break;
         case '"':
            var3 = this.b(var2, var5, var3);
            break;
         case '\'':
            var3 = this.a(var2, var5, var3);
            break;
         case ',':
            com.aspose.cells.b.a.a.ze.a(var4, (Object)com.aspose.cells.b.a.zr.a(var5));
            var5.delete(0, 0 + var5.length());
            break;
         case ';':
            com.aspose.cells.b.a.a.ze.a(var4, (Object)com.aspose.cells.b.a.zr.a(var5));
            var5.delete(0, 0 + var5.length());
            var4 = new ArrayList();
            com.aspose.cells.b.a.a.ze.a(var1, (Object)var4);
            break;
         case '}':
            com.aspose.cells.b.a.a.ze.a(var4, (Object)com.aspose.cells.b.a.zr.a(var5));
            var5.delete(0, 0 + var5.length());
            return var3;
         default:
            var5.append(var2[var3]);
         }
      }

      return var3;
   }

   private int a(zabd var1, StringBuilder var2, char[] var3, int var4) {
      if (var2.length() == 0) {
         var1.a("()");
         var1.a(1);
      } else {
         var1.a(3);
         var1.a(com.aspose.cells.b.a.zr.a(var2).toUpperCase());
         var1.a = com.aspose.cells.b.a.zr.a(var2);
         var2.delete(0, 0 + var2.length());
      }

      zabf var5 = new zabf();
      boolean var6 = false;
      StringBuilder var7 = new StringBuilder();
      int var8 = 0;

      for(int var9 = var4++; var4 < var3.length; ++var4) {
         zabd var10;
         switch(var3[var4]) {
         case '\n':
         case '\r':
            break;
         case ' ':
            int var12;
            for(var12 = var4 - 1; var12 >= 0 && (var3[var12] == '\r' || var3[var12] == '\n'); --var12) {
               --var4;
            }

            for(var12 = var4 + 1; var12 < var3.length && (var3[var12] == ' ' || var3[var12] == '\r' || var3[var12] == '\n'); ++var12) {
               ;
            }

            var8 += var12 - var4;
            boolean var11 = var4 == 0;
            if (!var11) {
               switch(var3[var4 - 1]) {
               case ' ':
               case '%':
               case '&':
               case '(':
               case ')':
               case '*':
               case '+':
               case ',':
               case '-':
               case '/':
               case ':':
               case '<':
               case '=':
               case '>':
               case '^':
                  var11 = true;
               case '!':
               case '"':
               case '#':
               case '$':
               case '\'':
               case '.':
               case '0':
               case '1':
               case '2':
               case '3':
               case '4':
               case '5':
               case '6':
               case '7':
               case '8':
               case '9':
               case ';':
               case '?':
               case '@':
               case 'A':
               case 'B':
               case 'C':
               case 'D':
               case 'E':
               case 'F':
               case 'G':
               case 'H':
               case 'I':
               case 'J':
               case 'K':
               case 'L':
               case 'M':
               case 'N':
               case 'O':
               case 'P':
               case 'Q':
               case 'R':
               case 'S':
               case 'T':
               case 'U':
               case 'V':
               case 'W':
               case 'X':
               case 'Y':
               case 'Z':
               case '[':
               case '\\':
               case ']':
               }
            }

            if (!var11) {
               var11 = var12 == var3.length;
            }

            if (!var11) {
               switch(var3[var12]) {
               case ' ':
               case '%':
               case '&':
               case '(':
               case ')':
               case '*':
               case '+':
               case ',':
               case '-':
               case '/':
               case ':':
               case '<':
               case '=':
               case '>':
               case '^':
                  var11 = true;
               case '!':
               case '"':
               case '#':
               case '$':
               case '\'':
               case '.':
               case '0':
               case '1':
               case '2':
               case '3':
               case '4':
               case '5':
               case '6':
               case '7':
               case '8':
               case '9':
               case ';':
               case '?':
               case '@':
               case 'A':
               case 'B':
               case 'C':
               case 'D':
               case 'E':
               case 'F':
               case 'G':
               case 'H':
               case 'I':
               case 'J':
               case 'K':
               case 'L':
               case 'M':
               case 'N':
               case 'O':
               case 'P':
               case 'Q':
               case 'R':
               case 'S':
               case 'T':
               case 'U':
               case 'V':
               case 'W':
               case 'X':
               case 'Y':
               case 'Z':
               case '[':
               case '\\':
               case ']':
               }
            }

            if (!var11) {
               var5.a(var7, " ", 15, (byte[])null);
            }

            var4 = var12 - 1;
            break;
         case '"':
            var4 = this.b(var3, var7, var4);
            break;
         case '#':
            if (var7.length() == 0) {
               var4 = this.c(var7, var3, var4);
            } else {
               var7.append(var3[var4]);
            }
            break;
         case '%':
            if (!var5.a(var7)) {
               throw new CellsException(5, b);
            }
            break;
         case '&':
            var5.a(var7, "&", 2, zasg.k);
            break;
         case '\'':
            var4 = this.a(var3, var7, var4);
            break;
         case '(':
            var10 = new zabd();
            var4 = this.a(var10, var7, var3, var4);
            var5.a(var10);
            break;
         case ')':
            if (var7.length() != 0) {
               var5.b(var7);
            } else if (var9 + var8 + 1 == var4 && var3[var9] == ',') {
               var10 = new zabd();
               var10.a(1);
               var1.a(var10);
               if (var1.i() != 3 && var1.d().size() > 1) {
                  this.a(var1.d());
               }

               return var4;
            }

            if (var5.getCount() != 0) {
               var1.a(this.a(var5));
            }

            if (var1.i() != 3 && var1.d().size() > 1) {
               this.a(var1.d());
            }

            return var4;
         case '*':
            var5.a(var7, "*", 4, zasg.h);
            break;
         case '+':
            if (!a(var7, var3, var4)) {
               var5.a(var7, "+", true);
            }
            break;
         case ',':
            if (var7.length() != 0) {
               var5.b(var7);
            } else if (var9 + var8 + 1 == var4) {
               var10 = new zabd();
               var10.a(1);
               var1.a(var10);
               var9 = var4;
               var8 = 0;
               break;
            }

            var9 = var4;
            var8 = 0;
            if (var5.getCount() != 0) {
               var1.a(this.a(var5));
               var5.clear();
            }
            break;
         case '-':
            if (a(var7, var3, var4)) {
               var7.append(var3[var4]);
            } else {
               var5.a(var7, "-", false);
            }
            break;
         case '/':
            var5.a(var7, "/", 4, zasg.i);
            break;
         case ':':
            if (var7.length() != 0 && !this.a(var3, var4, var7)) {
               var7.append(var3[var4]);
            } else {
               var5.a(var7, ":", 17, (byte[])null);
            }
            break;
         case '<':
            if (var4 + 1 != var3.length) {
               switch(var3[var4 + 1]) {
               case '=':
                  var5.a(var7, "<=", 1, zasg.m);
                  ++var4;
                  break;
               case '>':
                  var5.a(var7, "<>", 1, zasg.q);
                  ++var4;
                  break;
               default:
                  var5.a(var7, "<", 1, zasg.l);
               }
            }
            break;
         case '=':
            var5.a(var7, "=", 1, zasg.n);
            break;
         case '>':
            if (var4 + 1 != var3.length && var3[var4 + 1] == '=') {
               var5.a(var7, ">=", 1, zasg.o);
               ++var4;
            } else {
               var5.a(var7, ">", 1, zasg.p);
            }
            break;
         case '[':
            var4 = this.b(var7, var3, var4);
            break;
         case '^':
            var5.a(var7, "^", 5, zasg.j);
            break;
         case '{':
            if (var7.length() != 0) {
               throw new CellsException(5, b);
            }

            var10 = new zabd();
            var4 = this.a(var10, var3, var4);
            var5.a(var10);
            break;
         default:
            var7.append(var3[var4]);
         }
      }

      if (var1.i() != 3 && var1.d().size() > 1) {
         this.a(var1.d());
      }

      return var4;
   }

   boolean a(char[] var1, int var2, StringBuilder var3) {
      ++var2;

      while(var2 < var1.length) {
         switch(var1[var2]) {
         case ' ':
         case '%':
         case '&':
         case ')':
         case '*':
         case '+':
         case ',':
         case '-':
         case '/':
         case '<':
         case '=':
         case '>':
         case '^':
         case '{':
         case '}':
            return false;
         case '!':
         case '\'':
            return this.a.d().get(com.aspose.cells.b.a.zr.a(var3).toUpperCase()) == null;
         case '"':
         case '(':
            return true;
         case ':':
            for(int var4 = var3.length() - 1; var4 >= 1; --var4) {
               if (var3.charAt(var4) == ':') {
                  return true;
               }

               if (var3.charAt(var4) == '!') {
                  break;
               }
            }

            return false;
         default:
            ++var2;
         }
      }

      return false;
   }

   int a(char[] var1, StringBuilder var2, int var3) {
      var2.append(var1[var3]);
      ++var3;

      for(; var3 < var1.length; ++var3) {
         var2.append(var1[var3]);
         if (var1[var3] == '\'') {
            if (var3 + 1 == var1.length || var1[var3 + 1] != '\'') {
               break;
            }

            ++var3;
         }
      }

      return var3;
   }

   int b(char[] var1, StringBuilder var2, int var3) {
      var2.append(var1[var3]);
      ++var3;

      for(; var3 < var1.length; ++var3) {
         var2.append(var1[var3]);
         if (var1[var3] == '"') {
            if (var3 + 1 == var1.length || var1[var3 + 1] != '"') {
               break;
            }

            ++var3;
         }
      }

      if (var3 == var1.length) {
         throw new CellsException(5, b);
      } else {
         return var3;
      }
   }

   void a(ArrayList var1) {
      zabd var2 = (zabd)var1.get(0);

      for(int var3 = 1; var3 < var1.size(); ++var3) {
         zabd var4 = new zabd();
         var4.a(2);
         var4.a(",");
         var4.a(new ArrayList());
         com.aspose.cells.b.a.a.ze.a(var4.d(), (Object)var2);
         com.aspose.cells.b.a.a.ze.a(var4.d(), var1.get(var3));
         var2 = var4;
      }

      var1.clear();
      com.aspose.cells.b.a.a.ze.a(var1, (Object)var2);
   }

   zabd a(zabf var1) {
      switch(var1.getCount()) {
      case 0:
         return null;
      case 1:
         return var1.a(0);
      default:
         zabd[] var2 = new zabd[var1.getCount()];

         for(int var3 = 0; var3 < var2.length; ++var3) {
            var2[var3] = var1.a(var3);
         }

         return this.a(var2, 0, var2.length - 1, 1);
      }
   }

   zabd a(zabd[] var1, int var2, int var3, int var4) {
      int var5 = 255;
      int var6 = -1;

      for(int var7 = var3; var7 >= var2; --var7) {
         zabd var8 = var1[var7];
         if (var8.i() == 2) {
            if (var8.b == var4) {
               var5 = var4;
               var6 = var7;
               break;
            }

            if (var8.b < var5) {
               var5 = var8.b;
               var6 = var7;
            }
         }
      }

      if (var6 != -1) {
         zabd var9 = var1[var6];
         if (var6 - 1 == var2) {
            var9.a(var1[var6 - 1]);
         } else {
            var9.a(this.a(var1, var2, var6 - 1, var5));
         }

         if (var6 + 1 == var3) {
            var9.a(var1[var6 + 1]);
         } else {
            var9.a(this.a(var1, var6 + 1, var3, var5));
         }

         return var9;
      } else {
         return var1[var2];
      }
   }
}
